package eps.fortgeschrittenesFormular;

import java.awt.Color;
import java.awt.Component;
import javax.swing.JPanel;
import javax.swing.JCheckBox;
/**
 * Klasse Kontrollkaestchen.
 * Diese Klasse implementiert eine simple Checkbox, die Ja/Nein Benutzereingaben
 * entgegennehmen kann.
 * @author Ute Heuer, Universitaet Passau 
 */
public class Kontrollkaestchen extends Formulargrafik {
    /*---------------Attribute-----*/
    private final int feldhoehe = 22;
    
    private JCheckBox kaestchen;
    
    private boolean istGesperrt;

    /*---------------Konstruktor---*/
    public Kontrollkaestchen() {
        super();
        initialisieren("Beschriftung", false);
    }
    public Kontrollkaestchen(Formular formular) {
        super(formular);
        initialisieren("Beschriftung", false);
    } 
    public Kontrollkaestchen(String vorgabetext) {
        super();
        if (vorgabetext == null)
            vorgabetext = "Beschriftung";        
        initialisieren(vorgabetext, false);
    } 
    public Kontrollkaestchen(String vorgabetext, Formular formular) {
        super(formular);
        if (vorgabetext == null)
            vorgabetext = "Beschriftung";                
        initialisieren(vorgabetext, false);
    }     

    /*---------------Methoden------*/ 
    /**
     * Liefert die Beschriftung des Kaestchens.
     * 
     * @return die Beschriftung
     */
    public String beschriftungGeben() {
        return kaestchen.getText();
    }
    /**
     * Aendert die Beschriftung des Kaestchens.
     * 
     * @param beschriftung
     *            die neue Beschriftung
     */
    public void beschriftungSetzen(String beschriftung) {
        kaestchen.setText(beschriftung);
    }
    /** 
     * Prueft, ob das Kaestchen momentan ausgewaehlt ist. Wenn ja wird
     * true zurueckgegeben, sonst false.
     */    
    public boolean istAusgewaehlt() {
        return kaestchen.isSelected();
    }
    /** 
     * Setzt eine Art Vorgabe:
     * Der Aufruf auswaehlen(true) setzt eine Markierung in das Kaestchen.
     * Der Aufruf auswaehlen(false) hebt die Auswahl auf.
     * Natuerlich kann die Auswahl in der Anwendung 
     * dann vom Benutzer per Mausklick geaendert werden.
     */    
    public void auswaehlen(boolean ausgewaehlt) {
        kaestchen.setSelected(ausgewaehlt);
    }
    /**
     * Gesperrte Kontrollkaestchen koennen keine neuen 
     * Eingaben via Maus im Formularfenster entgegennehmen. 
     * In den meisten Umgebungen wird das dem Nutzer auch optisch
     * angezeigt. Alle Dienste der Klasse Kontrollkaestchen
     * koennen jedoch trotzdem sinnvoll genutzt werden.
     * 
     * Der Aufruf sperren(true) sperrt das Eingabefeld
     * Der Aufruf sperren(false) hebt eine Sperrung auf.
     */    
    public void sperren(boolean gesperrt) {
        kaestchen.setEnabled(!gesperrt);
        istGesperrt = gesperrt;
    }
    
    private void initialisieren(String vorgabetext, boolean ausgewaehlt) {
        Component awtKomponente = new JPanel();
        ((JPanel) awtKomponente).setLayout(null);
        ((JPanel) awtKomponente).setBounds(0, 0, formularGeben().breiteGeben(),
                feldhoehe);
        ((JPanel) awtKomponente).setBackground(Color.white);
        kaestchen = new JCheckBox(vorgabetext);
        kaestchen.setSelected(ausgewaehlt);
        if (istGesperrt) {
            kaestchen.setEnabled(false);  
        }
        kaestchen.setBounds(0, 0,
                formularGeben().breiteGeben(), feldhoehe);//0, 0
        ((JPanel) awtKomponente).add(kaestchen);
        awtKomponenteSetzen(awtKomponente);
    }
    /**
     * Wird vom Formular aufgerufen.
     */
    void formatieren() {
        initialisieren(kaestchen.getText(), kaestchen.isSelected());
    }    
    
}
